/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.pua.beans;

import com.icesoft.faces.context.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import pua.uniandes.entities.Mision;
import pua.uniandes.servicios.ReporteMisionesBeanRemote;

/**
 *
 * @author Julian
 */
public class DatosMisionBean {

    public static final String RESOURCE_PATH = "/WEB-INF/recursos/";
    @EJB
    private ReporteMisionesBeanRemote mundo;
    private Mision actual;
    private String[] datosActual;

    /** Creates a new instance of DatosMisionBean */
    public DatosMisionBean() {

    }

    public byte[] getArchivoReporte(String archivo) {

        return null;
    }

    public List<String> getMisiones() {
        ArrayList<String> resp = new ArrayList<String>();
        String[] misiones = mundo.getListadoMisiones();
        for (int i = 0; i < misiones.length; i++) {
            String mision = misiones[i];
            resp.add(mision);
        }
        //TODO ordenar por fecha
        return resp;
    }

    public Resource getConsolidado() {
        try {
            FacesContext fc = FacesContext.getCurrentInstance();
            ExternalContext ec = fc.getExternalContext();
            byte[] archivo = mundo.getArchivoReporte(getActual().getNombreMision());
            Resource consolidado = new MyRecurso(ec, "archivo reporte.csv", archivo);
            return consolidado;
        } catch (Exception ex) {
            Logger.getLogger(DatosMisionBean.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;

    }

    static byte[] toByteArray(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buf = new byte[4096];
        int len = 0;
        while ((len = input.read(buf)) > -1) {
            output.write(buf, 0, len);
        }
        return output.toByteArray();
    }

    public Mision getActual() {
        actualizarActual();
        return actual;
    }

    public void setActual(Mision actual) {
        this.actual = actual;
    }

    private void actualizarActual() {
        String parameter = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("param1");
        Mision mis = null;
        try {
            mis = mundo.getMision(parameter);
        } catch (Exception ex) {
            Logger.getLogger(DatosMisionBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        datosActual = mis.getDatosAnalisis();
        actual = mis;
    }

    public String nombreActual() {
        return datosActual[0];
    }

    public String getFechaCreacionActual() {
        return datosActual[1];
    }

    public String getNombreCoheteActual() {
        return datosActual[2];
    }

    public String getDuracionActual() {
        Double dif = Double.parseDouble(datosActual[3]);
        double min = dif / 60000;
        return "" + min;
    }

    public String getFechaDespegueActual() {
        return datosActual[4];
    }

    public String getPromedioXActual() {
        return datosActual[5];
    }

    public String getDesviacionXActual() {
        return datosActual[6];
    }

    public String getPromedioYActual() {
        return datosActual[7];
    }

    public String getDesviacionYActual() {
        return datosActual[8];
    }

    public String getPromedioZActual() {
        return datosActual[9];
    }

    public String getDesviacionZActual() {
        return datosActual[10];
    }

    public String getPromedioPotenciaActual() {
        return datosActual[11];
    }

    public String getDesviacionPotenciaActual() {
        return datosActual[12];
    }

    public String getPromedioAlturaActual() {
        return datosActual[13];
    }

    public String getDesviacionAlturaActual() {
        return datosActual[14];
    }

    public String getPromedioTempActual() {
        return datosActual[15];
    }

    public String getDesviacionTempActual() {
        return datosActual[16];
    }
}
